package com.taoyeshu.modules.sys.service;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.taoyeshu.common.utils.PageResult;
import com.taoyeshu.modules.sys.entity.Role;
import com.taoyeshu.modules.sys.mapper.RoleMapper;
import com.taoyeshu.modules.sys.query.RoleQuery;
import com.taoyeshu.modules.sys.vo.RoleVo;

/**
 * 
 * @描述:角色service
 * @作者 :HuanGe
 * @创建日期 :2015年10月2日 下午6:47:15
 *
 */
@Transactional(readOnly = true)
@Service("roleService")
public class RoleService {

	@Autowired
	private RoleMapper roleMapper;

	/**
	 * 
	 * @描述:根据查询条件获取角色
	 * @方法名称 :findPageResult
	 * @作者 :HuanGe
	 * @创建日期 :2015年10月2日 下午6:46:52
	 * @param roleQuery
	 *
	 */
	public PageResult<Role> findPageResult(RoleQuery roleQuery) {
		PageResult<Role> result = new PageResult<>();
		result.setPage(roleQuery.getPage());
		result.setPageSize(roleQuery.getRows());
		int count = roleMapper.findCount(roleQuery);
		if (count == 0) {
			return result;
		}
		int first = (roleQuery.getPage() - 1) * roleQuery.getRows();
		int max = roleQuery.getRows();
		List<Role> list = roleMapper.findList(roleQuery, first, max);
		result.setRows(list);
		result.setRecords(count);
		return result;
	}

	@Transactional(readOnly = false)
	public int save(Role role) {
		role.setState(1);
		return roleMapper.save(role);
	}

	@Transactional(readOnly = false)
	public int update(Role role) {
		roleMapper.update(role);
		return role.getId();
	}

	@Transactional(readOnly = false)
	public void delete(Role role) {
		role.setState(2);
		roleMapper.update(role);
	}

	public Role getById(Integer id) {
		return roleMapper.getById(id);
	}

	/**
	 * 
	 * @描述:删除角色的资源关联
	 * @方法名称 :removeRRByRoleId
	 * @作者 :HuanGe
	 * @创建日期 :2015年10月5日 下午9:14:25
	 * @param id
	 *
	 */
	@Transactional(readOnly = false)
	public void removeRRByRoleId(Integer id) {
		roleMapper.removeRRByRoleId(id);
	}

	/**
	 * 
	 * @描述:增加角色资源关联
	 * @方法名称 :saveRR
	 * @作者 :HuanGe
	 * @创建日期 :2015年10月5日 下午9:14:25
	 * @param id
	 *
	 */
	@Transactional(readOnly = false)
	public void saveRR(Integer id, Integer resId) {
		roleMapper.saveRR(id, resId);
	}

	public List<Role> queryAll() {
		return roleMapper.queryAll();
	}

	/**
	 * 
	 * @描述:根据用户id查询所关联角色
	 * @方法名称 :queryByUserId
	 * @作者 :HuanGe
	 * @创建日期 :2015年10月6日 下午6:08:04
	 * @param id
	 * @return
	 *
	 */
	public List<Role> queryByUserId(Integer userId) {
		return roleMapper.queryByUserId(userId);
	}

	/**
	 * 
	 * @描述:修改用户选择角色初始数据
	 * @方法名称 :queryAllRoleVos
	 * @作者 :HuanGe
	 * @创建日期 :2015年10月6日 下午6:16:48
	 * @param integer
	 * @return
	 *
	 */
	public List<RoleVo> queryAllRoleVos(Integer userId) {
		List<Role> allRoles = this.queryAll();
		List<Role> roles = this.queryByUserId(userId);
		List<RoleVo> roleVos = new ArrayList<>();
		for (Role role : allRoles) {
			RoleVo roleVo = new RoleVo();
			roleVo.setRole(role);
			for (Role role2 : roles) {
				if (role2.getId().equals(role.getId())) {
					roleVo.setSelected("selected");
					break;
				}
			}
			roleVos.add(roleVo);
		}
		return roleVos;
	}

}
